package com.xplay.xpocker.config.listener;

import com.xplay.xpocker.config.MessageEvent;
import com.xplay.xpocker.observer.ChannelHandlerManager;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.transaction.event.TransactionPhase;
import org.springframework.transaction.event.TransactionalEventListener;

@Component
public class MessageListener {

    /**
     * 如果这个函数没有增加 @Async  是不支持 事务提交后 执行的
     * <p>
     * 当当前用户拿到的数据和其他用户拿到的数据 不一样的时候 这里 是不是繁琐了一点
     *
     * @param event
     */
    @Async
    @TransactionalEventListener(classes = MessageEvent.class, fallbackExecution = true, phase = TransactionPhase.AFTER_COMMIT)
    public void notifyAll(MessageEvent event) {
        ChannelHandlerManager.getInstance().notifyMessage(event.getMessage());
    }
}
